package com.sugon.dao;

import com.sugon.entity.DevMaintenWorkEntity;
import com.sugon.entity.SysUserEntity;
import com.sugon.entity.dto.DevMoldFaultDurationCommonVO;
import com.sugon.entity.dto.DevMoldFaultDurationDetailVO;
import com.sugon.modules.analyse.model.vo.FaultHandleDurationTopWorkVO;
import com.sugon.modules.device.model.vo.DeviceTicketStatVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 维修工单管理Dao
 *
 * @author sugon
 * @date 2019-07-12 11:39:29
 */
public interface DevMaintenWorkDao extends BaseDao<DevMaintenWorkEntity> {

    /**
     * 统计某个部门下 尚未完成的设备维修工单
     * 目前只查询维修工单未实际开始维修前的工单列表
     * 即DevRepairTicketStatus中状态值为1,2的工单
     *
     * @param deptId 部门ID,一般是车间ID
     * @return
     */
    List<DeviceTicketStatVO> statIngDeviceTicketByDeptId(@Param("deptId") String deptId);

    /**
     * 获取以codePrefix为前缀的最新值
     *
     * @param codePrefix 编码前缀
     * @return
     */
    String getLastestRepairTicketCode(@Param("codePrefix") String codePrefix);

    /**
     * 获取机电维修工列表
     *
     * @param deptId
     * @return
     */
    List<SysUserEntity> getRepairUser(@Param("deptId") String deptId);

    String getZZC();

    /**
     * 维修工单编码查询维修工单
     *
     * @param repairCode
     * @return
     */
    DevMaintenWorkEntity queryObjectByCode(@Param("repairCode") String repairCode);

    /**
     * 统计指定组织下的工单执行情况
     *
     * @param deptCode
     * @return
     */
    List<Map<String, Object>> setWorkOrderStat(@Param("deptCode") String deptCode);

    /**
     * 获取Auxiliary
     *
     * @param id
     * @param userId
     * @return
     */
    int getAuxiliary(@Param("id") String id, @Param("userId") String userId);

    /**
     * 更新ED
     *
     * @param id
     * @return
     */
    int updateED(@Param("id") String id);

    /**
     * 更新设备状态
     *
     * @param devStatus
     * @param id
     * @return
     */
    int updateStatus(@Param("devStatus") Integer devStatus, @Param("id") String id);

    /**
     * 删除设备
     *
     * @param id
     * @return
     */
    int delEquipment(@Param("id") String id);

    /**
     * 删除维护用户
     *
     * @param id
     * @return
     */
    int delRepairUser(@Param("id") String id);

    /**
     * 紧急维修工单实施情况跟踪报表(当天的数据)
     *
     * @param params
     * @return
     */
    List<DevMaintenWorkEntity> getDevPlanImplementation(Map<String, Object> params);

    /**
     * 获取设备故障处理时长统计
     * 从接单、维修、效果确认三个维度 yxd
     *
     * @param param
     * @return
     */
    List<Map<String, Object>> getFaultHandleDurationStat(Map<String, Object> param);

    /**
     * 获取设备故障时长统计
     * 从（故障上报-效果确认）和（维修开始-维修结束）两个维度进行处理
     *
     * @param param
     * @return
     */
    List<Map<String, Object>> getFaultDurationStat(Map<String, Object> param);

    /**
     * 获取设备故障类型时长统计
     * 统计指定故障类型 发生的累计时长
     * 比如
     * 压力开关： 2135
     *
     * @param param
     * @return
     */
    List<DevMoldFaultDurationDetailVO> getFaultTypeDurationStat(Map<String, Object> param);

    /**
     * 统计设备故障时间明细
     * 即统计某台设备在哪个时间段发生了故障
     * 只关系时长，不关系发生了什么故障
     *
     * @param param
     * @return
     */
    List<DevMoldFaultDurationCommonVO> statDevFaultDurationItem(Map<String, Object> param);

    /**
     * 获取处于不同状态的设备维修工单统计
     *
     * @param param 包含统计起止时间段
     * @return
     */
    List<Map<String, Object>> doDevRepairTicketStatusNumStat(Map<String, String> param);

    /**
     * 故障处理时长TOP工单统计
     * 按照接单时长、维修时长和效果确认时长进行排序
     *
     * @param param
     * @return
     */
    List<FaultHandleDurationTopWorkVO> faultHandleDurationTopWorkStat(Map<String, Object> param);

    /**
     * 统计指定时间区间内 特定车间发生维修工单的数目
     *
     * @param workshopId
     * @param startDate
     * @param endDate
     * @return
     */
    List<DevMaintenWorkEntity> queryMatched(@Param("workshopId") String workshopId, @Param("startDate") String startDate, @Param("endDate") String endDate);
}
